"""
协程的本质就是单线程，并发执行
一个线程里面可以开启n个协程，真正意义上的同时执行
同一时间，同一个cpu里面只能运行一个线程，只不过通过上下文切换来实现的（速度很快）
概念：
    event_loop 事件循环，类似于无线循环的队列 get_event_loop()
    将协程函数放进队列里面去：
                        已完成：像队列一样进行删除
                        未完成：会一直在事件循环里执行，直到执行完成
                        全部完成：则事件循环为空，会直接结束掉事件循环

    定义协程任务：
        通过 async 关键字定义协程函数
        如果像常规函数一样调用则返回的是协程对象
        需要事件循环才可以去执行这个协程函数并完成里面的任务

    task 对象
        一个协程对象可以原生进行任务挂起。实现协程任务并发执行则需要使用task对象

    future 对象
        是 task 对象的父类
        future 涉及太多底层源码和调用方式比较复杂，有很多功能我们用不到，则延申出了 task 对象用于协程并发的处理

    async / await 关键字
        async 用于定义协程函数
        await 用于挂起阻塞协程任务（当事件循环遇到 await 关键字后会调度其他任务），
                还可以获取可等待对象的返回值：
                                    可等待对象：
                                        协程对象
                                        task 对象
                                        future 对象
                                        异步时间
"""
